package cc.iotkit.plugins.wzr.service;

import cc.iotkit.common.utils.StringUtils;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class TestAC {
    public static void main(String[] args) {
        ArrayList<Integer> pgids = new ArrayList<>();
        pgids.add(1);
        pgids.add(13);
        pgids.add(22);
        pgids.add(4);
        pgids.add(5);
//        pgids.remove(13);
        pgids.add(7);
        System.out.println(pgids);
        System.out.println(pgids.contains(21));
        BigInteger initialValue = BigInteger.ONE;
//        BigInteger shiftedValue = BigInteger.ZERO;
//        shiftedValue = shiftedValue.add(initialValue.shiftLeft(5-1));

//        System.out.println(shiftedValue);

        BigInteger pgidsum = new BigInteger("1",16);
        System.out.println(getPgidsum(pgidsum,2,true));
    }

    public static String getPgidsum(BigInteger pgidsum, int pvid, boolean isadd){
        ArrayList<Integer> pgids = getPvidByPgidsum(pgidsum);
        if (isadd){
            //如果已经被增加，直接返回结果，否则增加
            if (pgids.contains(pvid)) {
                return pgidsum.toString();
            }
            pgids.add(pvid);
        }else {
            //如果有就移除，没有则不用处理
            if (pgids.contains(pvid)) {
                pgids.remove(pvid);
            }
        }
        BigInteger shiftedValue = BigInteger.ZERO;

        for (int i = 0; i < pgids.size(); i++) {
            BigInteger initialValue = BigInteger.ONE;
            shiftedValue = shiftedValue.add(initialValue.shiftLeft(pgids.get(i)-1));
        }
        return shiftedValue.toString(16);
    }
    //根据pgidsum计算所有设备的pid
    public static ArrayList<Integer> getPvidByPgidsum(BigInteger pgidsum){
        ArrayList<Integer> arrayList = new ArrayList<>();
        String str = pgidsum.toString(2);
        int length = str.length();
        // 从右往左遍历字符串
        for (int i = length - 1; i >= 0; i--) {
            // 如果当前字符是'1'
            if (str.charAt(i) == '1') {
                // 计算从右往左的索引（这里直接输出，但你也可以存储起来）
                int fromIndexRight = length - 1 - i;
                arrayList.add(fromIndexRight+1);
            }
        }
        return arrayList;
    }

}
